package com.ruoyi.recipes.service;

import java.util.List;
import com.ruoyi.recipes.domain.Recipes;
import com.ruoyi.recipes.domain.Comments;
import com.ruoyi.recipes.domain.RecipeFavorites;

/**
 * 菜谱主表Service接口
 * 
 * @author syy
 * @date 2025-08-13
 */
public interface IRecipesService 
{
    /**
     * 查询菜谱主表
     * 
     * @param id 菜谱主表主键
     * @return 菜谱主表
     */
    public Recipes selectRecipesById(Long id);

    /**
     * 查询菜谱主表列表
     * 
     * @param recipes 菜谱主表
     * @return 菜谱主表集合
     */
    public List<Recipes> selectRecipesList(Recipes recipes);

    /**
     * 新增菜谱主表
     * 
     * @param recipes 菜谱主表
     * @return 结果
     */
    public int insertRecipes(Recipes recipes);

    /**
     * 修改菜谱主表
     * 
     * @param recipes 菜谱主表
     * @return 结果
     */
    public int updateRecipes(Recipes recipes);

    /**
     * 批量删除菜谱主表
     * 
     * @param ids 需要删除的菜谱主表主键集合
     * @return 结果
     */
    public int deleteRecipesByIds(Long[] ids);

    /**
     * 删除菜谱主表信息
     * 
     * @param id 菜谱主表主键
     * @return 结果
     */
    public int deleteRecipesById(Long id);
    
    /**
     * 添加菜谱评论
     * 
     * @param comments 评论信息
     * @return 结果
     */
    public int addComment(Comments comments);
    
    /**
     * 获取菜谱评论列表
     * 
     * @param recipeId 菜谱ID
     * @return 评论列表
     */
    public List<Comments> getCommentsByRecipeId(Long recipeId);
    
    /**
     * 获取菜谱评论数量
     * 
     * @param recipeId 菜谱ID
     * @return 评论数量
     */
    public Long getCommentCountByRecipeId(Long recipeId);
    
    /**
     * 评论点赞/取消点赞
     * 
     * @param commentId 评论ID
     * @param userId 用户ID
     * @return 是否点赞
     */
    public boolean toggleCommentLike(Long commentId, Long userId);
    
    /**
     * 审核评论
     * 
     * @param commentId 评论ID
     * @param status 审核状态：1通过，2拒绝
     * @return 结果
     */
    public int auditComment(Long commentId, Integer status);
    
    // ========== 收藏相关方法 ==========
    
    /**
     * 收藏/取消收藏菜谱
     * 
     * @param recipeId 菜谱ID
     * @param userId 用户ID
     * @return 是否收藏
     */
    public boolean toggleFavorite(Long recipeId, Long userId);
    
    /**
     * 获取菜谱收藏数量
     * 
     * @param recipeId 菜谱ID
     * @return 收藏数量
     */
    public Long getFavoriteCountByRecipeId(Long recipeId);
    
    /**
     * 获取用户收藏列表
     * 
     * @param userId 用户ID
     * @return 收藏列表
     */
    public List<RecipeFavorites> getFavoritesByUserId(Long userId);
    
    /**
     * 检查用户是否已收藏菜谱
     * 
     * @param recipeId 菜谱ID
     * @param userId 用户ID
     * @return 是否已收藏
     */
    public boolean checkUserFavorite(Long recipeId, Long userId);



    /**
     * 根据场景标签获取菜谱列表
     *
     * @param recipes 查询条件（包含sceneTagId）
     * @return 菜谱列表
     */
    public List<Recipes> selectRecipesBySceneTag(Recipes recipes);
}


